/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package py.una.pol.tesis.ii.wsrest;

import com.google.gson.Gson;
import com.sun.jersey.api.view.Viewable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.apache.log4j.Logger;
import py.una.informatica.dto.ListaPagRespuesta;
import py.una.informatica.dto.Persona;
import py.una.informatica.dto.Respuesta;

/**
 * REST Web Service
 *
 * @author Leandro
 */
@Path("pacientes")
@Stateless
public class PacientesResource {

//    @EJB
//    private Emergencia bean;    
    /**
     * Creates a new instance of PacientesResource
     */
    public PacientesResource() {
    }

    @GET
    @Path("/index")
    @Produces("text/html")
    public Response index(@Context HttpServletRequest req) {
        Map<String, Object> map = new HashMap<String, Object>();
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, MenuResource.index: " + session.getId());
            
            List<String> permisos = new ArrayList<String>();
            permisos.add("P1");
            permisos.add("P2");
            permisos.add("P3");
            permisos.add("P4");
            
            map.put("permisos", permisos);
            map.put("usuario", "leandrol");
        } catch (Exception e) {
            Logger.getLogger("").info("Error al mostrar el ui pacientes: ", e);
        }

        return Response.ok(new Viewable("/pacientes", map)).build();
    }

    @POST
    @Produces("application/json")
    public Response agregar(@Context HttpServletRequest req, String entrada) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, PacientesResource.crearPaciente: " + session.getId());

            Logger.getLogger("").info("Entrada crearPaciente: " + entrada);

            Persona paciente = gson.fromJson(entrada, Persona.class);
            Logger.getLogger("").info("Clase paciente: " + paciente.toString());
                        

            respuesta.setEstado("0");
            respuesta.setMensaje("Paciente creado correctamente.");
            respuesta.setDato(null);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta crearPaciente: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al crear el Paciente, intente de nuevo más tarde");
            respuesta.setDato(null);
            Logger.getLogger("").info("Error en crearPaciente", e);
        }

        return Response.ok(gson.toJson(respuesta), MediaType.APPLICATION_JSON).build();
    }

    @DELETE
    @Path("{id}")
    public Response deletePaciente(@Context HttpServletRequest req, @PathParam("id") String id) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, PacientesResource.deletePaciente: "
                    + session.getId());

            Logger.getLogger("").info("Entrada PacientesResource.deletePaciente: " + id);
           
            respuesta.setEstado("0");
            respuesta.setMensaje("Paciente eliminado correctamente.");
            respuesta.setDato(null);

            Logger.getLogger("").info("Respuesta PacientesResource.deletePaciente: " 
                    + gson.toJson(respuesta));
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al eliminar el paciente, intente de nuevo más tarde");
            respuesta.setDato(null);
            Logger.getLogger("").info("Error en PacientesResource.deletePaciente: ", e);
        }

        return Response.ok(gson.toJson(respuesta), MediaType.APPLICATION_JSON).build();
    }

    @GET
    @Path("{id}")
    @Produces("application/json")
    public Response getPaciente(@Context HttpServletRequest req, 
                                @PathParam("id") String id) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";

        List<Object> pacientes = new ArrayList<Object>();
        Persona paciente1 = null;
        Persona paciente2 = null;

        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, PacientesResource.getPaciente: " + session.getId());
            Logger.getLogger("").info("Entrada getPaciente, id: " + id);
            if (id.equals("1")) {
                paciente1 = new Persona(1, 4457533, "Leandro", "Luque", "11/07/1989",
                        "General Santos y Mencia Sanabria", "Oliva y Chile",
                        "0972263886", "0972263886", "lealuque09@gmail.com", "73",
                        "B+", "02/06/2015", "", "M", "Pilar");
                pacientes.add(paciente1);
            } else {
                paciente2 = new Persona(2, 3361242, "Cynthia", "Meza", "11/07/1989",
                        "General Santos y Mencia Sanabria", "Oliva y Chile",
                        "0972263886", "0972263886", "lealuque09@gmail.com", "73",
                        "B+", "02/06/2015", "", "M", "Pilar");
                pacientes.add(paciente2);
            }

            respuesta.setEstado("0");
            respuesta.setMensaje("OK");
            respuesta.setDato(pacientes);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta getPacientes: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al obtener el detalle del paciente.");
            respuesta.setDato(null);
            Logger.getLogger("").info("Error en getPaciente", e);
        }

        return Response.ok(gson.toJson(respuesta), MediaType.APPLICATION_JSON).build();
    }

    @GET
    @Produces("application/json")
    public Response getPacientes(@Context HttpServletRequest req) {
        Gson gson = new Gson();
        ListaPagRespuesta respuesta = new ListaPagRespuesta();        
        List<Object> pacientes = new ArrayList<Object>();
        Persona paciente1 = null;
        Persona paciente2 = null;


//        List<Personas> list_p = bean.getTodasLasPersonas();
//        
//        Personas p = list_p.get(0);

        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, PacientesResource.getPacientes: " + session.getId());

            paciente1 = new Persona(1, 4457533, "Leandro", "Luque", "11/07/1989",
                    "General Santos y Mencia Sanabria", "Oliva y Chile",
                    "0972263886", "0972263886", "lealuque09@gmail.com", "73",
                    "B+", "02/06/2015", "", "M", "Pilar");
//            paciente1 = new Persona(1, p.getNumDoc(), p.getNombres(), p.getApellidos(), "11/07/1989",
//                        p.getDireccionCasa(),p.getDireccionOficina(),
//                        p.getTelefono(), p.getCelular(), p.getCorreo(), "73",
//                        "B+", "02/06/2015", "", "M", "Pilar");

            paciente2 = new Persona(2, 3361242, "Cynthia", "Meza", "11/07/1989",
                    "General Santos y Mencia Sanabria", "Oliva y Chile",
                    "0972263886", "0972263886", "lealuque09@gmail.com", "73",
                    "B+", "02/06/2015", "", "M", "Pilar");

            pacientes.add(paciente1);
            pacientes.add(paciente2);

            respuesta.setTotal(pacientes.size());
            respuesta.setRows(pacientes);

            Logger.getLogger("").info("Respuesta getPacientes: " + gson.toJson(pacientes));
        } catch (Exception e) {
            pacientes.add(0);
            pacientes.add(null);
            Logger.getLogger("").info("Error en getPacientes", e);
        }

        return Response.ok(gson.toJson(pacientes), MediaType.APPLICATION_JSON).build();
    }
    
    @GET
    @Path("/combo")
    @Produces("application/json")
    public Response getComboPacientes(@Context HttpServletRequest req) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        List<Object> pacientes = new ArrayList<Object>();
        Persona paciente1 = null;
        Persona paciente2 = null;
        
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, PacientesResource.getComboPacientes: " + session.getId());

            paciente1 = new Persona(1, 4457533, "Leandro", "Luque");

            paciente2 = new Persona(2, 3361242, "Cynthia", "Meza");

            pacientes.add(paciente1);
            pacientes.add(paciente2);

            respuesta.setMensaje("OK");
            respuesta.setEstado("0");
            respuesta.setDato(pacientes);

            Logger.getLogger("").info("Respuesta getComboPacientes: " + gson.toJson(respuesta));
        } catch (Exception e) {
            pacientes.add(0);
            pacientes.add(null);
            Logger.getLogger("").info("Error en getComboPacientes", e);
        }

        return Response.ok(gson.toJson(respuesta), MediaType.APPLICATION_JSON).build();
    }

    @PUT
    @Path("{id}")
    @Produces("application/json")
    public Response editarPaciente(@Context HttpServletRequest req, 
                                    @PathParam("id") String id, String entrada) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, PacientesResource.editarPaciente: " + session.getId());

            Logger.getLogger("").info("Entrada editarPaciente: " + entrada);

            Persona paciente = gson.fromJson(entrada, Persona.class);
            Logger.getLogger("").info("Clase paciente: " + paciente.toString());

            respuesta.setEstado("0");
            respuesta.setMensaje("Paciente editado correctamente.");
            respuesta.setDato(null);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta editarPaciente: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al editar el paciente, intente de nuevo más tarde");
            respuesta.setDato(null);
            Logger.getLogger("").info("Error en editarPaciente: ", e);
        }

        return Response.ok(gson.toJson(respuesta), MediaType.APPLICATION_JSON).build();
    }
}
